package com.solo.common.redis.config;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.solo.common.redis.manager.FlexSpringCacheManager;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;

import java.util.concurrent.TimeUnit;

/**
 * 本地缓存配置类
 * @author 十一
 * @since 2024/11/29
 * 人生若只如初见，何事秋风悲画扇
 * <p>参考：<a href="https://blog.csdn.net/weixin_43691884/article/details/135521437">SpringBoot Caffeine+Redisson配置二级缓存</a></p>
 **/
@AutoConfiguration
@EnableCaching //开启缓存功能，作用于缓存配置类上或者作用于springboot启动类上。
public class CacheConfig {

    /**
     * caffeine 本地缓存处理器
     */
    @Bean
    public Cache<Object, Object> caffeine() {
        return Caffeine.newBuilder()
                // 设置最后一次写入或访问后经过固定时间过期
                .expireAfterWrite(30, TimeUnit.SECONDS)
                // 初始的缓存空间大小
                .initialCapacity(100)
                // 缓存的最大条数
                .maximumSize(1000)
                .build();
    }

    /**
     * 自定义缓存管理器 整合spring-cache
     */
    @Bean
    public CacheManager cacheManager() {
        return new FlexSpringCacheManager();
    }
    
}
